using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace bridgeexample { class Program { public interface IMessageSender { void SendMessage(string subject, string body); } public abstract class Message { public IMessageSender MessageSender { get; set; } public string Subject { get; set; } public string Body { get; set; } public abstract void Send(); } public class SystemMessage : Message { public override void Send() { MessageSender.SendMessage(Subject, Body); } } public class UserMessage : Message { public string UserComments { get; set; } public override void Send() { string fullbody = string.Format("{0}\nUser Comments:{1}", Body, UserComments); MessageSender.SendMessage(Subject, fullbody); } } public class EmailSender : IMessageSender { public void SendMessage(string subject, string body) { Console.WriteLine("Email\n{0}\n{1}\n", subject, body); } } public class MSMQSender : IMessageSender { public void SendMessage(string subject, string body) { Console.WriteLine("MSMQ\n{0}\n{1}\n", subject, body); } } public class WebServiceSender : IMessageSender { public void SendMessage(string subject, string body) { Console.WriteLine("Web Service\n{0}\n{1}\n", subject, body); } } static void Main(string[] args) { IMessageSender email = new EmailSender(); IMessageSender queue = new MSMQSender(); IMessageSender web = new WebServiceSender(); Message message = new SystemMessage(); message.Subject = "Test Message"; message.Body = "This is a test message"; message.MessageSender = email; message.Send(); message.MessageSender = queue; message.Send(); message.MessageSender = web; message.Send(); UserMessage usermsg = new UserMessage(); usermsg.Subject = "Test user message"; usermsg.Body = "This is a test user message"; usermsg.UserComments = "C# is awesome!"; usermsg.MessageSender = email; usermsg.Send(); } } }